﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Credisoft.Models.Credisoft_BO;

namespace Credisoft.Models.Credisoft_DAO
{
    public class EnterpriseDAO
    {
        public EnterpriseBO getEnterpriseDataById(int enterpriseId)
        {
            EnterpriseBO enterpriseAux= new EnterpriseBO();

            using (credisoftEntities bd = new credisoftEntities())
            {
                empresa result = (from p in bd.empresa
                                  where p.idempresa == enterpriseId
                                  select p).First();
                if (result  != null)
                {
                    enterpriseAux = new EnterpriseBO();

                    enterpriseAux.agentId = result.idrepresentante;
                    enterpriseAux.cem = (double)result.cem;
                    enterpriseAux.creationDate = (DateTime)result.fechacreacion;
                    enterpriseAux.defaultState = result.estadomorosidad;
                    enterpriseAux.enterpriseId = result.idempresa;
                    enterpriseAux.groupId = result.idgrupo;
                    enterpriseAux.officialAddress = result.direccionfiscal;
                    enterpriseAux.phone = result.telefono;
                    enterpriseAux.recordDate = result.fecharegistro;
                    enterpriseAux.ruc = result.ruc;
                    enterpriseAux.sectorId = result.idsector;
                    enterpriseAux.socialReason = result.razonsocial;
                    enterpriseAux.recordDateAux = (String)enterpriseAux.recordDate.ToString("dd/MM/yyyy");
                    enterpriseAux.creationDateAux = (String)enterpriseAux.creationDate.ToString("dd/MM/yyyy");
                }
            }

            return enterpriseAux;
        }

        public empresa getEnterpriseData(string enterprise)
        {
            EnterpriseBO objEmpresa = new EnterpriseBO();
            empresa found = new empresa();
            using (credisoftEntities bd = new credisoftEntities())
            {
                found = (from p in bd.empresa
                         where p.razonsocial.Equals(enterprise)
                         select p).First();
            }
            return found;
        }

        public List<EnterpriseBO> getEnterpriseDataList()
        {
            // Se abre la conexion con la Base de Datos
            credisoftEntities bd = new credisoftEntities();

            // Se realiza una busqueda para encontrar las empresas registradas en el sistema
            var data = (from p in bd.empresa
                        select p);

            // Si la busqueda fue exitosa, se crea un objeto para almacenar los resultados de la busqueda
            EnterpriseBO enterpriseAux;
            List<EnterpriseBO> listEnterprise = new List<EnterpriseBO>();
            foreach (var result in data)
            {
                enterpriseAux = new EnterpriseBO();

                enterpriseAux.agentId = result.idrepresentante;
                enterpriseAux.cem = (double)result.cem;
                enterpriseAux.creationDate = (DateTime)result.fechacreacion;
                enterpriseAux.defaultState = result.estadomorosidad;
                enterpriseAux.enterpriseId = result.idempresa;
                enterpriseAux.groupId = result.idgrupo;
                enterpriseAux.officialAddress = result.direccionfiscal;
                enterpriseAux.phone = result.telefono;
                enterpriseAux.recordDate = result.fecharegistro;
                enterpriseAux.ruc = result.ruc;
                enterpriseAux.sectorId = result.idsector;
                enterpriseAux.socialReason = result.razonsocial;
                enterpriseAux.recordDateAux = (String)enterpriseAux.recordDate.ToString("dd/MM/yyyy");
                enterpriseAux.creationDateAux = (String)enterpriseAux.creationDate.ToString("dd/MM/yyyy");

                listEnterprise.Add(enterpriseAux);
            }

            return listEnterprise;
        }

        public int insertEnterprise(empresa enterprise)
        {
            int success = 0;
            credisoftEntities db = new credisoftEntities(); // Se abre la conexion con la Base de Datos

            db.empresa.Add(enterprise); // Se inserta un nuevo elemento en la Base de Datos
            success = db.SaveChanges(); // Se realiza commit en la Base de Datos

            return success;
        }

        public int editEnterprise(EnterpriseBO enterprise)
        {
            int success = 0;
            credisoftEntities db = new credisoftEntities(); // Se abre la conexion con la Base de Datos

            // Se realiza una busqueda para encontrar una empresa con determinado ID
            empresa nEnterprise = (from p in db.empresa
                               where p.idempresa == enterprise.enterpriseId
                               select p).First();

            // Si la busqueda fue exitosa, se edita el objeto con los datos de entrada recibidos por la funcion
            nEnterprise.razonsocial = enterprise.socialReason;
            nEnterprise.ruc = enterprise.ruc;
            nEnterprise.fecharegistro = enterprise.recordDate;
            nEnterprise.idsector = enterprise.sectorId;
            nEnterprise.idgrupo = enterprise.groupId;
            nEnterprise.fechacreacion = enterprise.creationDate;
            nEnterprise.direccionfiscal = enterprise.officialAddress;
            nEnterprise.cem = (decimal) enterprise.cem;
            nEnterprise.estadomorosidad = (short) enterprise.defaultState;

            success = db.SaveChanges();

            return success;
        }
    }
}